Performance Optimization হল একটি গুরুত্বপূর্ণ প্রক্রিয়া যা অ্যাপ্লিকেশনের কার্যক্ষমতা এবং দ্রুততা বৃদ্ধি করার জন্য ব্যবহৃত হয়। Google Charts ব্যবহার করার সময়, বিশাল ডেটা সেট বা জটিল চার্টগুলি লোড করার ফলে পারফরম্যান্সের সমস্যা দেখা দিতে পারে। এজন্য Google Charts-এ পারফরম্যান্স অপ্টিমাইজেশন গুরুত্বপূর্ণ, যা আপনার চার্টের লোডিং টাইম কমাতে এবং সাধারণ কার্যক্ষমতা বাড়াতে সহায়তা করে।
এই গাইডে, আমরা Google Charts-এ পারফরম্যান্স অপ্টিমাইজেশন করার জন্য কিছু কৌশল আলোচনা করব।
Large Data Sets বা বিশাল ডেটা সেট নিয়ে কাজ করার সময় ডেটা প্রক্রিয়া করার জন্য Data Preprocessing গুরুত্বপূর্ণ। আপনি যদি ডেটার আকার বড় হয়ে যায়, তবে এটি চার্ট লোডিং এবং পারফরম্যান্সে প্রভাব ফেলতে পারে।
chartData = data.slice(0, 100); // Limit the data to the first 100 entries for performance
Lazy Loading হল একটি কৌশল যেখানে ডেটা বা চার্টের বিভিন্ন অংশ শুধুমাত্র তখন লোড হয় যখন সেগুলি দেখতে হবে। এটি রিডাক্ট করে চার্ট লোডিং টাইম এবং পুরো অ্যাপ্লিকেশনের পারফরম্যান্সকে বাড়ায়।
function loadChartData(pageNumber: number) {
const pageSize = 100; // Number of data points per page
const start = pageNumber * pageSize;
const end = start + pageSize;
this.chartData = this.data.slice(start, end); // Load data lazily
}
DataTable
EfficientlyDataTable Google Charts-এ ডেটা পরিচালনার জন্য ব্যবহৃত একটি স্ট্রাকচার। এটি চার্টে ডেটা প্রদর্শনের জন্য ব্যবহৃত হলেও, খুব বড় ডেটা সেটে DataTable ব্যবহারের সময় এটি লোডিং টাইম বাড়াতে পারে। যদি সম্ভব হয়, ছোট আকারের ডেটা সেট ব্যবহার করুন বা আপনার ডেটাকে প্রথমে array বা অন্য কাস্টম ফরম্যাটে প্রক্রিয়া করুন, তারপর DataTable-এ রূপান্তর করুন।
var data = google.visualization.arrayToDataTable([
['Year', 'Sales'],
['2018', 1000],
['2019', 1170],
['2020', 660]
]);
// Apply filters or preprocess before passing to DataTable
বেশি জটিল বা মাল্টিপল চার্ট একসাথে লোড করলে পারফরম্যান্স কমে যেতে পারে। Chart Complexity কমানোর জন্য কয়েকটি কৌশল অবলম্বন করতে পারেন:
chartOptions = {
animation: {
startup: true,
easing: 'inAndOut',
duration: 500 // Reduce the animation time
},
hAxis: { gridlines: { count: 4 } }, // Reduce the number of gridlines
vAxis: { gridlines: { color: 'none' } }, // Remove gridlines
};
চার্ট রেন্ডারিং টাইম কমানোর জন্য কিছু টিপস:
getImageURI()
: চার্টকে ইমেজ হিসেবে এক্সপোর্ট করার জন্য getImageURI() ব্যবহার করা যেতে পারে, এতে লোড সময় কমে যায়।google.charts.load('current', {packages: ['corechart', 'bar']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
const data = google.visualization.arrayToDataTable(chartData);
const chart = new google.visualization.BarChart(document.getElementById('chart_div'));
chart.draw(data, chartOptions);
}
Caching হল একটি কৌশল যা ডেটাকে স্থানীয়ভাবে বা সার্ভারে স্টোর করে, যাতে পুনরায় ডেটা লোড করার প্রয়োজন না হয়। যখন একবার ডেটা লোড করা হয়, তখন ক্যাশিং ডেটা দ্রুত অ্যাক্সেস নিশ্চিত করে, ফলে পারফরম্যান্স উন্নত হয়।
if (localStorage.getItem('chartData')) {
this.chartData = JSON.parse(localStorage.getItem('chartData'));
} else {
this.chartData = fetchDataFromAPI();
localStorage.setItem('chartData', JSON.stringify(this.chartData));
}
Chart.draw()
Only When NeededGoogle Charts-এর draw() ফাংশনটি চার্ট রেন্ডার করার জন্য ব্যবহৃত হয়, তবে আপনি যদি ডেটা বা চার্টের কনফিগারেশন পরিবর্তন করেন, তবে প্রতিবার চার্ট রেন্ডার করার পরিবর্তে শুধুমাত্র যখন প্রয়োজন তখনই এই ফাংশনটি কল করুন।
if (this.chartNeedsRedraw) {
this.chart.draw(this.data, this.options);
}
Google Charts-এ Performance Optimization খুবই গুরুত্বপূর্ণ যখন আপনি বড় ডেটা সেট বা জটিল চার্ট ব্যবহার করছেন। Efficient Data Handling, Lazy Loading, Chart Complexity Reduction, এবং Caching সহ বিভিন্ন কৌশল ব্যবহার করে আপনি চার্টের পারফরম্যান্স উন্নত করতে পারেন। এটি শুধুমাত্র চার্টের লোডিং টাইম এবং রেন্ডারিং ফাস্ট করতে সহায়তা করে না, বরং আপনার অ্যাপ্লিকেশনের সামগ্রিক কার্যকারিতা এবং ইউজার এক্সপেরিয়েন্সও উন্নত হয়।
Chart Rendering Performance হল একাধিক ডেটা পয়েন্ট বা বৃহৎ ডেটা সেটের মধ্যে দ্রুত এবং কার্যকরীভাবে চার্টের প্রদর্শন নিশ্চিত করা। Google Charts বা অন্যান্য ডেটা ভিজুয়ালাইজেশন লাইব্রেরি ব্যবহারের সময় বড় ডেটা সেট বা ইন্টারঅ্যাকটিভ চার্টের ক্ষেত্রে পারফরমেন্সের সমস্যা হতে পারে। তাই পারফরমেন্স উন্নত করার জন্য কিছু কৌশল ব্যবহার করা প্রয়োজন।
এখানে কিছু Best Practices এবং কৌশল দেওয়া হলো যা Google Charts API-তে Chart Rendering Performance উন্নত করতে সহায়তা করবে।
বড় ডেটা সেটের ক্ষেত্রে, পুরো ডেটা সেট একসাথে চার্টে প্রদর্শন করা হলে এটি পারফরমেন্সে নেতিবাচক প্রভাব ফেলতে পারে। ডেটা ফিল্টারিং এবং অ্যাগ্রিগেশন এর মাধ্যমে আপনি একসাথে সমস্ত ডেটা প্রদর্শন না করে কেবল প্রয়োজনীয় তথ্য বা সংশ্লিষ্ট উপস্থাপনাকে বিশ্লেষণ করতে পারেন।
ডেটার মোট বা গড় মান বের করে আপনি চার্টের জটিলতা কমাতে পারেন। উদাহরণস্বরূপ, দিনের পরিবর্তে সপ্তাহের বা মাসের গড় বিক্রি দেখাতে পারেন।
// Example: Aggregating data by month
const monthlyData = [
['January', 150],
['February', 130],
['March', 200],
['April', 160]
];
এটি ডেটার আকার কমায় এবং চার্ট রেন্ডারিং দ্রুত করে।
Lazy Loading হল একটি টেকনিক যা ডেটা বা চার্ট রেন্ডারিংয়ের সময় প্রথমে প্রাথমিক ডেটা লোড করে এবং যখন প্রয়োজন হয় তখন অতিরিক্ত ডেটা লোড করা হয়। এটি চার্ট লোডিংয়ের সময়ে অতিরিক্ত লোড কমায় এবং অ্যাপ্লিকেশনের পারফরমেন্স উন্নত করে।
প্রথমে কম ডেটা লোড করুন, তারপর ইউজারের ইন্টারঅ্যাকশনের মাধ্যমে আরও ডেটা লোড করুন।
let chartData = initialData; // Initial data load
function loadMoreData() {
chartData = chartData.concat(moreData); // Load more data on user interaction
drawChart(chartData); // Redraw the chart with more data
}
এটি বিশেষ করে বড় ডেটা সেটের ক্ষেত্রে সহায়ক, যেখানে পুরো ডেটা একসাথে লোড করার পরিবর্তে ধীরে ধীরে লোড করা হয়।
প্রতিটি ইউজার ইন্টারঅ্যাকশনের পরে পুরো চার্ট পুনরায় রেন্ডার করা পারফরমেন্সের জন্য ক্ষতিকর হতে পারে। Google Charts API-তে chart.draw() কল করার সময় এটি পুরো চার্ট রেন্ডার করে, যার ফলে ফ্রেম রেট কমে যেতে পারে। তাই শুধুমাত্র যখন সত্যিই প্রয়োজন হয় তখনই চার্ট রেন্ডার করা উচিত।
// Example: Only update the data, not the whole chart
function updateChartData(newData) {
chartData = newData;
chartOptions = {
...chartOptions,
data: newData // Update only the data part of the chart
};
chart.draw(chartData, chartOptions); // Redraw the chart with updated data
}
Caching এর মাধ্যমে আপনি পূর্বের চার্ট রেন্ডারিং তথ্য ক্যাশে রাখতে পারেন, যাতে প্রতিবার চার্ট রেন্ডার করার জন্য আবার ডেটা প্রসেস না করতে হয়। এছাড়া ডেটাকে Preprocess করে তা সরাসরি চার্টে পাস করা হয় যাতে রেন্ডারিং দ্রুত হয়।
let cachedData = null;
function getChartData() {
if (cachedData) {
return cachedData; // Return cached data if available
}
const data = fetchDataFromAPI(); // Fetch data if not in cache
cachedData = data; // Store fetched data in cache
return data;
}
এটি বিশেষ করে API কল বা বড় ডেটা সেটের ক্ষেত্রে কার্যকর, যেখানে ডেটা ফেচিংয়ের পর সেটি ক্যাশে সংরক্ষণ করা যায়।
Chart Types নির্বাচন করা অত্যন্ত গুরুত্বপূর্ণ। কিছু চার্ট টাইপ (যেমন Pie Chart, Bubble Chart) অনেক বেশি জটিল হতে পারে যদি সেখানে অনেক ডেটা পয়েন্ট থাকে। এমন ক্ষেত্রে, সহজ এবং দ্রুত রেন্ডারিং চার্ট যেমন Bar Chart, Column Chart, বা Line Chart ব্যবহার করা উচিত।
// Example: Optimizing for large data set
const chartType = data.length > 1000 ? 'LineChart' : 'PieChart'; // Use LineChart for large datasets
এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনার কাছে বিশাল ডেটা থাকে, কারণ কিছু চার্ট টাইপ বড় ডেটা সেটের সাথে দ্রুত কাজ করতে পারে।
Async Data Loading হল একটি কৌশল যা ডেটা লোডিং এবং চার্ট রেন্ডারিং আলাদা করতে সহায়তা করে। এতে ইউজার দ্রুত প্রথম চার্ট দেখতে পায় এবং ডেটা আসার সাথে সাথে চার্ট আপডেট হতে থাকে।
function loadDataAsync() {
fetchDataFromAPI()
.then(data => {
chartData = data;
drawChart(chartData); // Draw chart after data is loaded
})
.catch(error => {
console.error('Error loading data:', error);
});
}
এটি ব্যবহারকারীর জন্য একটি ভালো অভিজ্ঞতা তৈরি করে, কারণ ইউজার প্রথমে চার্ট দেখে এবং ডেটা আসা শুরু হলে সেটি আপডেট হয়।
Simplified Data Models ব্যবহার করা যেতে পারে যাতে আপনি শুধুমাত্র প্রয়োজনীয় ডেটা প্রদর্শন করেন এবং ব্যাকগ্রাউন্ডে জটিল ডেটা প্রসেস করেন। এটি চার্ট রেন্ডারিং দ্রুত করতে সহায়তা করে।
const simplifiedData = data.map(item => {
return {
category: item.category,
value: item.value
};
});
এটি ডেটার মাত্র কিছু অংশ (যেমন প্রয়োজনীয় ক্যাটেগরি এবং ভ্যালু) ব্যবহার করে চার্ট রেন্ডারিং দ্রুত করতে সহায়তা করে।
Chart Rendering Performance উন্নত করার জন্য কিছু গুরুত্বপূর্ণ কৌশল হলো:
এগুলি প্রয়োগ করে আপনি আপনার Google Charts পারফরমেন্সের গতি এবং দক্ষতা উন্নত করতে পারবেন।
Google Charts API-এ Data Binding এবং Chart Loading Speed দুটোই গুরুত্বপূর্ণ বিষয়, যা চার্টের পারফরম্যান্স এবং ইউজারের অভিজ্ঞতাকে প্রভাবিত করতে পারে। Data Binding দিয়ে আপনি চার্টের ডেটাকে ডাইনামিকভাবে পরিবর্তন করতে পারেন এবং Chart Loading Speed বাড়ানোর মাধ্যমে আপনার অ্যাপ্লিকেশনটি দ্রুত লোড হবে, যার ফলে ইউজারের জন্য একটি আরও স্নিগ্ধ অভিজ্ঞতা তৈরি হবে।
এখানে, আমরা Data Binding এবং Chart Loading Speed বাড়ানোর কিছু কৌশল এবং টিপস আলোচনা করব।
Data Binding হল এক প্রক্রিয়া যার মাধ্যমে Angular কম্পোনেন্টে থাকা ডেটা টেমপ্লেটের সাথে যুক্ত করা হয়। এটি ব্যবহারকারীর ইনপুট বা ডেটা পরিবর্তনের সঙ্গে চার্টের ডেটা আপডেট করে। সঠিকভাবে Data Binding ব্যবহার করলে এটি চার্টের রেন্ডারিং দ্রুত হতে সাহায্য করতে পারে।
Change Detection Strategy: Angular-এ Change Detection মূলত অ্যাপ্লিকেশনের ডেটার পরিবর্তনগুলো ট্র্যাক করে। যদি আপনি OnPush Change Detection Strategy ব্যবহার করেন, তবে Angular কেবল তখনই চেক করবে যখন ইনপুট প্রোপার্টি পরিবর্তিত হবে, এতে পারফরম্যান্সের উন্নতি হতে পারে।
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush
})
Avoid Unnecessary Data Changes: চার্টে পরিবর্তন বা ডেটা আপডেট করার সময় অতিরিক্ত ডেটা পরিবর্তন এড়ানো উচিত। বিশেষ করে যদি ডেটা শুধুমাত্র কিছু সংখ্যক কলাম বা রো পরিবর্তন হয়, তবে পুরো ডেটা আপডেট না করে সেগুলোরই পরিবর্তন করুন।
// Instead of updating entire data array, update only specific rows or columns
this.chartData[0][1] = newValue;
ngOnChanges
অথবা ngDoCheck
lifecycle hooks ব্যবহার করতে পারেন যাতে শুধুমাত্র প্রয়োজনীয় ডেটা পরিবর্তন হলে চার্টটি আপডেট হয়।Chart Loading Speed বাড়ানো বেশ গুরুত্বপূর্ণ, কারণ এটি ইউজারের অভিজ্ঞতাকে প্রভাবিত করে। বিশেষ করে যদি আপনি বড় ডেটাসেট ব্যবহার করছেন, তবে চার্টের লোডিং স্লো হয়ে যেতে পারে। এখানে কিছু কৌশল দেওয়া হলো যেগুলি ব্যবহার করে আপনি Chart Loading Speed বাড়াতে পারেন।
Data Aggregation: যদি আপনার চার্টে অনেক ডেটা থাকে, তবে সেগুলোর মধ্যে aggregation ব্যবহার করতে পারেন, যেমন গড়, মোট, সর্বোচ্চ বা ন্যূনতম মান। এটি লোডিং স্পিড বাড়াতে সাহায্য করতে পারে।
উদাহরণ:
const aggregatedData = data.map(item => ({
name: item.name,
totalSales: item.sales.reduce((acc, curr) => acc + curr, 0)
}));
Reduce Chart Elements: চার্টে অতিরিক্ত উপাদান (যেমন লেজেন্ড, টুলটিপ, অক্ষের লেবেল) যোগ করা পারফরম্যান্সকে ক্ষতিগ্রস্ত করতে পারে। চার্টে শুধুমাত্র প্রয়োজনীয় উপাদানগুলি রাখুন।
chartOptions = {
legend: { position: 'none' }, // Hide legend to improve speed
tooltip: { trigger: 'none' } // Disable tooltips
};
Use of Google Charts API Directly: Angular এর angular-google-charts লাইব্রেরি ব্যবহারের পরিবর্তে, আপনি সরাসরি Google Charts API ব্যবহার করতে পারেন। এতে কিছু অতিরিক্ত অপশন এবং ক্যাশিং সুবিধা পাবেন যা লোডিং স্পিড বাড়াতে সহায়তা করতে পারে।
ngOnInit() {
google.charts.load('current', { packages: ['corechart', 'pie'] });
google.charts.setOnLoadCallback(this.drawChart.bind(this));
}
drawChart() {
const data = google.visualization.arrayToDataTable(this.chartData);
const chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, this.chartOptions);
}
Async Data Loading: আপনি Async Data Loading ব্যবহার করে ডেটা asynchronously ফেচ করতে পারেন, যাতে চার্ট লোড হওয়ার সময় ডেটা ফেচ করা হয় এবং ইউজারের জন্য একসাথে লোড না হয়।
ngOnInit() {
this.loadDataAsync().then(data => {
this.chartData = data;
this.drawChart();
});
}
loadDataAsync(): Promise<any[]> {
return new Promise((resolve) => {
setTimeout(() => {
resolve(this.chartData);
}, 1000); // Simulating async data fetch
});
}
Throttling and Debouncing: আপনি যদি ডেটা আপডেট করতে চান (যেমন ইউজার ইনপুটের মাধ্যমে), তবে throttling বা debouncing কৌশল ব্যবহার করুন, যাতে ডেটা রিফ্রেশ করার ফ্রিকোয়েন্সি কমে যায় এবং পারফরম্যান্সে কোনো প্রভাব না পড়ে।
import { debounceTime } from 'rxjs/operators';
this.dataStream.pipe(
debounceTime(300) // wait for 300ms after the last event before emitting value
).subscribe(data => {
this.updateChartData(data);
});
Chart Caching: আপনি যদি একই চার্ট বারবার রেন্ডার করেন, তবে Chart Caching ব্যবহার করতে পারেন। এতে, একবার চার্ট রেন্ডার হওয়ার পরে সেটির ক্যাশ তৈরি হবে এবং পরবর্তী সময়ে তা দ্রুত লোড হবে।
if (!this.chartCache) {
this.chartCache = google.visualization.arrayToDataTable(this.chartData);
}
const chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(this.chartCache, this.chartOptions);
import { Component, OnInit } from '@angular/core';
import { ChangeDetectionStrategy } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AppComponent implements OnInit {
title = 'Optimized Chart Example';
chartType = 'PieChart';
chartData: any[] = [
['Task', 'Hours per Day'],
['Work', 8],
['Eat', 2],
['Commute', 2],
['Watch TV', 2],
['Sleep', 8]
];
chartOptions = {
title: 'My Daily Activities',
pieHole: 0.4,
width: 600,
height: 400,
legend: { position: 'none' } // Hide legend for faster rendering
};
ngOnInit() {
google.charts.load('current', { packages: ['corechart', 'pie'] });
google.charts.setOnLoadCallback(this.drawChart.bind(this));
}
drawChart() {
const data = google.visualization.arrayToDataTable(this.chartData);
const chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, this.chartOptions);
}
// Function to simulate data update every 3 seconds
updateChartData() {
setInterval(() => {
this.chartData[1][1] = Math.floor(Math.random() * 10) + 1; // Randomizing Work value
this.drawChart();
}, 3000);
}
}
<h1>{{ title }}</h1>
<google-chart
[type]="chartType"
[data]="chartData"
[options]="chartOptions">
</google-chart>
এবং Reduce Complexity ব্যবহার করা যেতে পারে।
এই কৌশলগুলি অনুসরণ করলে আপনি আপনার Google Charts অ্যাপ্লিকেশনের পারফরম্যান্স এবং ইউজার এক্সপেরিয়েন্স অনেকটাই উন্নত করতে পারবেন।
Lazy Loading এবং Virtual Scrolling হল দুটি গুরুত্বপূর্ণ কৌশল যা অ্যাপ্লিকেশনটির পারফরম্যান্স উন্নত করতে সাহায্য করে। Angular অ্যাপে এই দুটি কৌশল ব্যবহারের মাধ্যমে অ্যাপ্লিকেশন দ্রুত লোড হয় এবং বড় ডেটাসেট খুব দ্রুত দেখানো যায়। এখানে আমরা Lazy Loading এবং Virtual Scrolling সম্পর্কে আলোচনা করব এবং Angular অ্যাপে এগুলির ব্যবহার দেখাব।
Lazy Loading হল এমন একটি কৌশল যেখানে নির্দিষ্ট অংশের কোড বা মডিউলগুলো তখনই লোড হয় যখন তা প্রয়োজন হয়। এর মাধ্যমে অ্যাপ্লিকেশনের প্রাথমিক লোড টাইম কমে যায়, কারণ অ্যাপ্লিকেশন শুরুতে সব কোড লোড না হয়ে শুধু প্রাথমিক প্রয়োজনীয় কোড লোড হয়।
Angular অ্যাপে Lazy Loading করার জন্য, আমরা Feature Modules তৈরি করি এবং সেগুলোকে Router এর মাধ্যমে লোড করি।
প্রথমে একটি Feature Module তৈরি করুন যেটি আপনি Lazy Load করতে চান:
ng generate module feature --route feature --module app
এই কমান্ডটি একটি Feature Module তৈরি করবে এবং app-routing.module.ts-এ লেজি লোডিং রাউটিং কনফিগারেশন সেট করবে।
app-routing.module.ts
ফাইলে Lazy Loading কনফিগারেশন যোগ করুন:
const routes: Routes = [
{
path: 'feature',
loadChildren: () => import('./feature/feature.module').then(m => m.FeatureModule)
}
];
এখানে, loadChildren
প্রপার্টি দিয়ে Feature Module লোড হবে যখন ইউজার feature
পাথ ব্যবহার করবে।
feature.module.ts
ফাইলে প্রয়োজনীয় কম্পোনেন্ট এবং কোড তৈরি করুন।
@NgModule({
declarations: [FeatureComponent],
imports: [CommonModule]
})
export class FeatureModule {}
এখন, যখন ইউজার feature
URL তে যাবে, তখন শুধু FeatureModule লোড হবে, যা অ্যাপ্লিকেশনের প্রাথমিক লোডিং টাইম কমিয়ে দেবে।
Virtual Scrolling হল এমন একটি কৌশল যেখানে বড় ডেটাসেটগুলোকে পেজিং বা স্ক্রলিং মাধ্যমে দেখা যায়, তবে সেগুলো একসাথে লোড না হয়ে স্ক্রল করার সময় ডেটা লোড হয়। এটি বড় ডেটাসেটগুলি দ্রুত দেখানোর জন্য ব্যবহৃত হয়।
Angular এ @angular/cdk/scrolling
লাইব্রেরি ব্যবহার করে Virtual Scrolling করা যায়। এটি ডেটা স্ক্রলিং এর জন্য একটি ডাইনামিক লোডিং কৌশল সরবরাহ করে।
প্রথমে, Angular CDK ইন্সটল করতে হবে:
npm install @angular/cdk
এখন, app.module.ts
ফাইলে ScrollingModule
ইমপোর্ট করুন:
import { ScrollingModule } from '@angular/cdk/scrolling';
@NgModule({
imports: [ScrollingModule]
})
export class AppModule {}
app.component.ts
ফাইলে ডেটা এবং স্ক্রলিং সেটআপ করুন:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
items = Array.from({ length: 1000 }, (_, i) => `Item #${i + 1}`);
}
app.component.html
ফাইলে Virtual Scrolling ব্যবহার করুন:
<div class="scroll-container">
<cdk-virtual-scroll-viewport itemSize="50" class="viewport">
<div *cdkVirtualFor="let item of items" class="item">
{{ item }}
</div>
</cdk-virtual-scroll-viewport>
</div>
এখানে, cdk-virtual-scroll-viewport
ট্যাগটি ব্যবহার করা হয়েছে, যা স্ক্রলিংয়ের মাধ্যমে ডেটা লোড করবে। itemSize="50"
দ্বারা প্রতিটি আইটেমের উচ্চতা ৫০ পিক্সেল নির্ধারণ করা হয়েছে।
app.component.css
ফাইলে স্ক্রলিং স্টাইলিং করুন:
.scroll-container {
height: 400px;
width: 100%;
border: 1px solid #ccc;
}
.viewport {
height: 100%;
width: 100%;
overflow: auto;
}
.item {
padding: 10px;
border-bottom: 1px solid #ddd;
}
এখানে, height: 400px; দিয়ে স্ক্রলিং কনটেইনারের উচ্চতা নির্ধারণ করা হয়েছে, যাতে স্ক্রলিং এলাকা দেখা যায়।
Caching এবং Data Optimization চার্টগুলির পারফরম্যান্স উন্নত করতে সহায়ক। Google Charts API ব্যবহার করার সময়, যখন ডেটার আকার বড় হয়ে যায় অথবা নিয়মিতভাবে ডেটা পরিবর্তন হয়, তখন Caching এবং Data Optimization গুরুত্বপূর্ণ ভূমিকা পালন করে।
Caching এবং Data Optimization ব্যবহার করলে চার্ট দ্রুত লোড হবে এবং প্রয়োজনীয় ডেটা দ্রুত প্রদর্শিত হবে, ফলে অ্যাপ্লিকেশনের পারফরম্যান্স এবং ইউজার এক্সপেরিয়েন্স উন্নত হবে। এখানে আমরা Google Charts ব্যবহার করে Caching এবং Data Optimization এর জন্য কিছু কৌশল আলোচনা করব।
Caching একটি সাধারণ প্রক্রিয়া, যার মাধ্যমে ডেটাকে একবার লোড করে সেটি পরবর্তী বার দ্রুত ব্যবহার করা যায়। এটি যখন ডেটা বাহির থেকে (যেমন API থেকে) আসে, তখন সেটি আগের মতো বার বার লোড না করে, একটি লোগ করা যায় এবং পরে ব্যবহার করা হয়।
Browser caching হলো ব্রাউজারের মধ্যে ডেটা সংরক্ষণ করার প্রক্রিয়া, যাতে পরবর্তীতে ডেটা লোড করতে সময় কম লাগে।
আপনি যদি API থেকে ডেটা গ্রহণ করেন, তবে server-side caching এর মাধ্যমে সেই ডেটা সার্ভারে ক্যাশ করতে পারেন। এটি API কলের সংখ্যা কমাবে এবং দ্রুত ডেটা সার্ভার থেকে ফিরে আসবে।
আপনি Angular অ্যাপে LocalStorage বা SessionStorage ব্যবহার করে ডেটা ক্যাশ করতে পারেন। যেমন:
getDataFromAPI() {
const cachedData = localStorage.getItem('chartData');
if (cachedData) {
// If data is available in cache
this.chartData = JSON.parse(cachedData);
this.drawChart();
} else {
// If no cached data, fetch from API
this.http.get('https://api.example.com/data').subscribe(data => {
this.chartData = data;
localStorage.setItem('chartData', JSON.stringify(data)); // Cache the data
this.drawChart();
});
}
}
এই ক্ষেত্রে, প্রথমবার যখন ডেটা API থেকে ফেচ করা হয়, তখন সেটি LocalStorage এ সংরক্ষিত হয়। পরবর্তীতে, ডেটা ক্যাশ থেকে লোড হয়ে চার্টে প্রদর্শিত হবে।
ডেটা অপটিমাইজেশন দ্বারা আপনি ডেটার পরিমাণ কমাতে, দ্রুত লোড করতে, এবং চার্টের পারফরম্যান্স উন্নত করতে পারবেন। নিম্নলিখিত কৌশলগুলি ডেটা অপটিমাইজেশনের জন্য ব্যবহার করা যায়:
ডেটা গঠনের সময়, প্রয়োজনীয় ডেটা ছাড়া বাকি সব কিছু বাদ দিয়ে ছোট ডেটা সংগ্রহ করা। Google Charts API-তে আপনি শুধু সেগুলো পাঠাবেন যেগুলি চার্টের জন্য দরকার, যেমন:
this.chartData = [
['Category', 'Value'],
['Work', 8],
['Eat', 2]
];
এখানে, শুধুমাত্র প্রয়োজনীয় 'Category' এবং 'Value' কলামগুলো রাখা হয়েছে, যাতে ডেটার সাইজ কম হয়।
Lazy loading হলো একটি কৌশল, যার মাধ্যমে আপনি চার্টের ডেটা প্রথমে শুধুমাত্র প্রয়োজনীয় অংশ লোড করেন। পরবর্তী অংশগুলো তখন লোড হয় যখন ইউজার সেটি দেখে বা ইন্টারঅ্যাক্ট করে।
এটি ব্যবহার করে আপনি চার্টের বড় ডেটা ফাইল দ্রুত লোড করতে পারেন এবং পরবর্তী ডেটা লোড করার জন্য অপেক্ষা করতে পারেন। উদাহরণস্বরূপ, যখন ইউজার "Drilldown" করবে, তখন Lazy Loading ডেটা লোড হবে।
Data aggregation দ্বারা ডেটাকে সংক্ষেপ করা হয়। আপনি যদি বিশাল ডেটাসেট দিয়ে কাজ করেন, তবে সেটি Summarize বা Group করে কম ডেটা পাঠানো হয়।
ধরা যাক, আপনার কাছে মাসিক সেলস ডেটা রয়েছে, তবে আপনি শুধুমাত্র মাসের মোট সেলস দেখাতে চাইছেন। এটি Aggregation এর মাধ্যমে করা যেতে পারে।
const aggregatedData = this.chartData.reduce((acc, item) => {
if (!acc[item.category]) {
acc[item.category] = 0;
}
acc[item.category] += item.value;
return acc;
}, {});
এখানে category-wise ডেটা যোগ করে ডেটাকে সংক্ষেপ করা হয়েছে।
ডেটা ইফিশিয়েন্টলি সংরক্ষণ করার জন্য Map বা Set এর মতো ডেটা স্ট্রাকচার ব্যবহার করা যায়। এগুলি এক্সেস করার জন্য দ্রুত হয়।
const dataMap = new Map();
this.chartData.forEach(item => {
dataMap.set(item.category, item.value);
});
এভাবে আপনি ডেটাকে Map বা Set স্ট্রাকচারে রূপান্তর করে দ্রুত অ্যাক্সেস করতে পারবেন।
Server-Side Processing ব্যবহার করে আপনি ডেটা ক্লায়েন্ট সাইডে পাঠানোর আগে প্রোসেস করতে পারেন। এটি বড় ডেটা ফাইল বা ডেটা সেট নিয়ে কাজ করার সময় সহায়ক হয়। যেমন, সার্ভারে data aggregation, filtering, বা sorting করা হলে, ক্লায়েন্ট সাইডে শুধু প্রয়োজনীয় ডেটা পাঠানো হয়।
this.http.get('https://api.example.com/optimizedData').subscribe(data => {
this.chartData = data;
this.drawChart();
});
এখানে, সার্ভারেই ডেটা অপটিমাইজ করা হচ্ছে এবং পরে শুধুমাত্র প্রয়োজনীয় ডেটা ক্লায়েন্টে পাঠানো হচ্ছে।
Google Charts API-এর পারফরম্যান্স অপটিমাইজ করার জন্য কিছু টিপস:
chartOptions = {
animation: {
startup: false, // Disable animation
duration: 0
}
};
Caching এবং Data Optimization হল Google Charts-এর পারফরম্যান্স উন্নত করার দুটি গুরুত্বপূর্ণ কৌশল। Caching ব্যবহার করে আপনি ডেটাকে স্থানীয়ভাবে সংরক্ষণ করে পুনরায় ডেটা লোডের প্রক্রিয়া ত্বরান্বিত করতে পারেন, এবং Data Optimization কৌশলগুলোর মাধ্যমে ডেটার আকার কমিয়ে পারফরম্যান্স বাড়াতে পারেন। Lazy Loading, Data Aggregation, Efficient Data Structures, এবং Server-Side Processing ব্যবহারের মাধ্যমে আপনি ডেটাকে আরও দ্রুত এবং কার্যকরীভাবে পরিচালনা করতে পারবেন।
Read more